package web.stu.service;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import web.stu.model.dto.clazz.ClassDTO;
import web.stu.model.entity.Class;
import web.stu.model.vo.ClassVO;
import web.stu.model.vo.UserVO;

import javax.servlet.http.HttpServletRequest;
import java.util.List;

/**
 * @author administer
 * @description 针对表【class(班级表)】的数据库操作Service
 * @createDate 2025-05-13 19:55:10
 */
public interface ClassService extends IService<Class> {
    /**
     * 获取所有班级列表
     *
     * @return 班级列表
     */
    List<ClassVO> listAllClasses();

    /**
     * 分页查询班级
     *
     * @param classDTO
     * @return 分页班级数据
     */
    Page<ClassVO> pageClasses(ClassDTO classDTO);

    /**
     * 添加班级
     *
     * @param classDTO 班级信息
     */
    void addClass(ClassDTO classDTO, HttpServletRequest request);

    /**
     * 更新班级
     *
     * @param classDTO 班级信息
     */
    void updateClass(ClassDTO classDTO, HttpServletRequest request);

    /**
     * 删除班级
     *
     * @param id 班级ID
     */
    void deleteClassById(Integer id, HttpServletRequest request);

    /**
     * 根据ID获取班级详情
     *
     * @param id 班级ID
     * @return 班级详情
     */
    ClassVO getClassById(Integer id);

    /**
     * 根据班级获取班级人数
     *
     * @param id
     * @return
     */
    Integer getStuCountByClassId(Integer id);


    /**
     * 根据教师id获取班级列表
     *
     * @param teacherId
     * @param request
     * @return
     */
    List<ClassVO> getClassByTeacherId(Integer teacherId, HttpServletRequest request);


    /**
     * 根据课程id添加学生
     *
     * @param studentIds
     * @param classId
     * @return
     */
    int addStudentsByClass(List<Integer> studentIds, Integer classId);

    /**
     * 获取没有选择课程的学生
     *
     * @param request
     * @return
     */
    List<UserVO> getStudentListDontSelectClass(HttpServletRequest request);
}
